package funs

import (
	"github.com/spf13/viper"
	"golang.org/x/crypto/bcrypt"
	"regexp"
)

//一些公用方法

/*
BcryptPwd 加密
GenerateFromPassword以给定的代价返回密码的bcrypt哈希。

如果给定的成本小于最小成本，则成本将改为默认成本。使用此包中定义的CompareHashAndPassword将返回的哈希密码与其明文版本进行比较。

param needHashStr string 需要加密的字符
param encryptLength int  加密的长度
*/
func BcryptPwd(needHashStr string, encryptLength int) (string, error) {
	bytes, err := bcrypt.GenerateFromPassword([]byte(needHashStr), encryptLength)
	if err != nil {
		return "", err
	}
	return string(bytes), nil
}

// JointImageUrl 拼接图片地址   数据库是
func JointImageUrl(path string) string {
	//return config.AppConf.PathConf.Host + config.AppConf.EnvConf.HttpPort + config.AppConf.PathConf.AvatarPath + path
	//return conf.AppConf.PathConf.Host + conf.AppConf.EnvConf.HttpPort + path
	return viper.Get("path.host").(string) + viper.Get("app.http_port").(string) + path
}

// VerifyEmailFormat email格式验证
func VerifyEmailFormat(email string) bool {
	//pattern := `\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*` //匹配电子邮箱
	pattern := `^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$`

	reg := regexp.MustCompile(pattern)
	return reg.MatchString(email)
}

// VerifyMobileFormat mobile verify
func VerifyMobileFormat(mobileNum string) bool {
	regular := "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$"

	reg := regexp.MustCompile(regular)
	return reg.MatchString(mobileNum)
}

/*


用户名：  	/^[a-z0-9_-]{3,16}$/
密码：	    /^[a-z0-9_-]{6,18}$/
十六进制值：	/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
电子邮箱	：  /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
		    /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/
URL： 	    /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
IP 地址：	/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
            /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
HTML 标签：	/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

删除代码\\注释：      	(?<!http:|\S)//.*$
Unicode编码中的汉字范围：	/^[\u2E80-\u9FFF]+$/




*/

// CutStrNumByScene 根据场景截取字符串的位数
func CutStrNumByScene(str string, cutNum, scene uint) string {
	//当需要截取的字符串为空时
	if str == "" {
		return "zydh,.159"
	}
	//当字符串的长度和需要截取的长度一致时
	if uint(len(str)) <= cutNum {
		return str
	}
	// scene == 2 从尾开始
	if scene == 2 {
		return str[uint(len(str))-cutNum:]
	} else { // scene == 1 从头开始
		return str[:(0 + cutNum)]
	}
}
